//package com.zlzf.helloworld.qq;
//
//import android.support.v4.widget.ViewDragHelper;
//import android.view.View;
//
//import static android.support.v4.widget.ViewDragHelper.INVALID_POINTER;
//
///**
// * Created by doudo on 2017/2/27.
// */
//public class MyDrawHelper extends ViewDragHelper.Callback {
//
//    /**
//     * Touch的down事件会回调这个方法 tryCaptureView
//     *
//     * @Child：指定要动的孩子  （哪个孩子需要动起来）
//     * @pointerId: 点的标记
//     * @return : ViewDragHelper是否继续分析处理 child的相关touch事件
//     */
//    @Override
//    public boolean tryCaptureView(View child, int pointerId) {
//        System.out.println("调用tryCaptureView");
//        System.out.println("contentView : " + (mContent == child));
//        return mContent == child || mDelete == child;
//    }
//    // Touch的move事件会回调这面这几个方法
//    // clampViewPositionHorizontal
//    // clampViewPositionVertical
//    // onViewPositionChanged
//    /**
//     *
//     * 捕获了水平方向移动的位移数据
//     * @param child 移动的孩子View
//     * @param left 父容器的左上角到孩子View的距离
//     * @param dx 增量值，其实就是移动的孩子View的左上角距离控件（父亲）的距离，包含正负
//     * @return 如何动
//     *
//     * 调用完此方法，在android2.3以上就会动起来了，2.3以及以下是海动不了的
//     * 2.3不兼容怎么办？没事，我们复写onViewPositionChanged就是为了解决这个问题的
//     */
//    @Override
//    public int clampViewPositionHorizontal(View child, int left, int dx) {
//        if(child == mContent){ // 解决内容部分左右拖动的越界问题
//            if(left>0){
//                return 0;
//            }else if(-left>mDeleteWidth){
//                return -mDeleteWidth;
//            }
//        }
//        if(child == mDelete){ // 解决删除部分左右拖动的越界问题
//            if(left<mContentWidth - mDeleteWidth){
//                return mContentWidth - mDeleteWidth;
//            }else if(left > mContentWidth){
//                return mContentWidth;
//            }
//        }
//        return left;
//    }
//    @Override
//    public int clampViewPositionVertical(View child, int top, int dy) {
//        return super.clampViewPositionVertical(child, top, dy);
//    }
//    /**
//     * 当View的位置改变时的回调 这个方法的价值是结合clampViewPositionHorizontal或者clampViewPositionVertical
//     * @param changedView  哪个View的位置改变了
//     * @param left  changedView的left
//     * @param top  changedView的top
//     * @param dx x方向的上的增量值
//     * @param dy y方向上的增量值
//     */
//    @Override
//    public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
//        //super.onViewPositionChanged(changedView, left, top, dx, dy);
//        invalidate();
//        if(changedView == mContent){ // 如果移动的是mContent
//            //我们移动mContent的实惠要相应的联动改变mDelete的位置
//            // 怎么改变mDelete的位置，当然是mDelete的layput方法啦
//            int tempDeleteLeft = mContentWidth+left;
//            int tempDeleteRight = mContentWidth+left + mDeleteWidth;
//            mDelete.layout(tempDeleteLeft,0,tempDeleteRight,mDeleteHeight);
//        }else{ // touch的是mDelete
//            int tempContentLeft = left - mContentWidth;
//            int tempContentRight = left;
//            mContent.layout(tempContentLeft,0,tempContentRight,mContentHeight);
//        }
//    }
//    /**
//     * 相当于Touch的up的事件会回调onViewReleased这个方法
//     *
//     * @param releasedChild
//     * @param xvel x方向的速率
//     * @param yvel y方向的速率
//     */
//    @Override
//    public void onViewReleased(View releasedChild, float xvel, float yvel) {
//        //super.onViewReleased(releasedChild, xvel, yvel);
//        // 方法的参数里面没有left，那么我们就采用 getLeft()这个方法
//        int mConLeft = mContent.getLeft();
//        // 这里没必要分来两个孩子判断
//        if(-mConLeft>mDeleteWidth/2){  // mDelete展示起来
//            isShowDelete(true);
//            if(onSlideDeleteListener != null){
//                onSlideDeleteListener.onOpen(SlideDelete.this); // 调用接口打开的方法
//            }
//        }else{    // mDetele隐藏起来
//            isShowDelete(false);
//            if(onSlideDeleteListener != null){
//                onSlideDeleteListener.onClose(SlideDelete.this); // 调用接口的关闭的方法
//            }
//        }
//        super.onViewReleased(releasedChild, xvel, yvel);
//    }
//
//
//    public boolean smoothSlideViewTo(View child, int finalLeft, int finalTop) {
//        mCapturedView = child;
//        mActivePointerId = INVALID_POINTER;
//        boolean continueSliding = forceSettleCapturedViewAt(finalLeft, finalTop, 0, 0);
//        if (!continueSliding && mDragState == STATE_IDLE && mCapturedView != null) {
//            // If we're in an IDLE state to begin with and aren't moving anywhere, we
//            // end up having a non-null capturedView with an IDLE dragState
//            mCapturedView = null;
//        }
//        return continueSliding;
//    }
//}
